package pruebas;

import niveles.Escenario;
import niveles.Tablero;
import basicas.Posicion;
import junit.framework.*;
import juego.ParedLadrillos;
import juego.enemigos.*;
import juego.enums.*;


public class TanqueEnemigoTest extends TestCase{

	private TanqueEnemigo tanqueGrizzly;
	private Posicion posicionInicial1;
	private Posicion posicionInicial2;
	private TanqueEnemigo tanqueMirage;
	private TanqueEnemigo tanqueInfantry;
	private TanqueEnemigo tanque;
	private Posicion posicionDestino;
	private Escenario nivel;
	
	public static void main (String[] args) {
		junit.swingui.TestRunner.run(TanqueEnemigoTest.class);
	}
		
	public void setUp(){
	
		posicionInicial1 = new Posicion(5,3);
		posicionInicial2 = new Posicion (3,4);
		tanqueGrizzly = new GrizzlyBattleTank(posicionInicial2);
		tanqueMirage =  new MirageTank(posicionInicial1);
		tanqueInfantry = new InfantryFightingVehicle(posicionInicial2);
		tanque = new MirageTank(new Posicion(0, 0));
		nivel = new Escenario();
		tanqueMirage.setNivel(nivel);
		tanqueInfantry.setNivel(nivel);
	}


	
	public void testMoverMirageTank(){
		
		tanqueMirage.mover(tipoMovimiento.arriba);
		posicionDestino = tanqueMirage.getPosicionDestino();
		assertTrue((posicionDestino.getX() == 5) && (posicionDestino.getY() == 2));
		assertTrue(tanqueMirage.getMovimientosRestantes()== 20);
		
	}
	
	public void testMoverInfantry() {	
		tanqueInfantry.mover(tipoMovimiento.derecha);
		posicionDestino = tanqueInfantry.getPosicionDestino();
		assertTrue((posicionDestino.getX() == 4) && (posicionDestino.getY() == 4));		
		assertTrue(tanqueInfantry.getMovimientosRestantes() == 16);
	}
	
	public void testAvanzarMirageTank() {	
		tanqueMirage.mover(tipoMovimiento.derecha);
		tanqueMirage.avanzar();
		posicionDestino = tanqueMirage.getPosicion();
		assertTrue((posicionDestino.getX()== 5.05 )&(posicionDestino.getY()== 3 ));
		
		tanqueMirage.mover(tipoMovimiento.arriba);
		tanqueMirage.avanzar();
		assertTrue((posicionDestino.getX()== 5.05 )&(posicionDestino.getY()== 2.95 ));
		
	}
	
	public void testAvanzarInfantry(){
		
		tanqueInfantry.mover(tipoMovimiento.izquierda);
		tanqueInfantry.avanzar();
		posicionDestino = tanqueInfantry.getPosicion();				
		assertTrue((posicionDestino.getX()== 2.94 ) && (posicionDestino.getY()== 4.0));

		tanqueInfantry.mover(tipoMovimiento.abajo);
		tanqueInfantry.avanzar();
		assertTrue((posicionDestino.getX()== 2.94 )&&(posicionDestino.getY()== 4.06 ));		
	}
	
	public void testCentrar() {
		tanque.getPosicion().mover(0.9, 0.8);
		tanque.centrar();
		assertTrue(tanque.getPosicion().getX() == 1);
		assertTrue(tanque.getPosicion().getY() == 1);
		
		assertFalse(tanque.getPosicion().getX() == 2);
		assertFalse(tanque.getPosicion().getY() == 0);		
	}
	
	public void testMover() {
		assertTrue(tanque.getMovimientosRestantes() == 0);
		tanque.mover(tipoMovimiento.abajo);
		assertFalse(tanque.getMovimientosRestantes() <= 0);
	}
	
	public void testGetPosicionDestino() {
		assertTrue(tanque.getPosicionDestino() == null);
		tanque.mover(tipoMovimiento.derecha);
		assertTrue(tanque.getPosicionDestino().getX() == 1);
		assertTrue(tanque.getPosicionDestino().getY() == 0);
		
		tanque.mover(tipoMovimiento.abajo);
		assertTrue(tanque.getPosicionDestino().getX() == 0);
		assertTrue(tanque.getPosicionDestino().getY() == 1);
	}
	
	public void testSePuedeMover() {
		Tablero tablero = new Tablero();		
		assertFalse(tablero.sePuedeMover(tanque, tipoMovimiento.arriba));
		
		tanque.getPosicion().mover(5, 5);
		assertTrue(tablero.sePuedeMover(tanque, tipoMovimiento.derecha));

		tablero.ocuparPosicion(new ParedLadrillos(new Posicion(6, 5)));		
		assertFalse(tablero.sePuedeMover(tanque, tipoMovimiento.derecha));
 	}
	
}
